<?php

error_reporting(E_ALL);

/**
 * ConexionBD - class.fncReportes.php
 *
 * $Id$
 *
 * This file is part of ConexionBD.
 *
 * Automatically generated on 12.03.2010, 15:47:51 with ArgoUML PHP module 
 * (last revised $Date: 2008-04-19 08:22:08 +0200 (Sat, 19 Apr 2008) $)
 *
 * @author Miguel Angel Chavez
 */

if (0 > version_compare(PHP_VERSION, '5')) {
    die('This file was generated for PHP 5');
}

/**
 * include ConexionBD
 *
 * @author Miguel Angel Chavez Obregon
 * @see Funcion con operativas basicas a la base de datos, cualquier metodo que se requiera hacer que no sea directo a la base de datos debera crear una clase que haga extend a esta.
 * @version 1.0
 */
require_once('class.ConexionBD.php');

/**
 * include reporte
 *
 * @author Miguel Angel Chavez
 */
require_once('interface.reporte.php');

/* user defined includes */
// section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FEF-includes begin
// section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FEF-includes end

/* user defined constants */
// section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FEF-constants begin
// section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FEF-constants end

/**
 * Short description of class fncReportes
 *
 * @access public
 * @author Miguel Angel Chavez
 */
class fncReportes
    extends ConexionBD
        implements reporte
{
    // --- ASSOCIATIONS ---
    // generateAssociationEnd : 

    // --- ATTRIBUTES ---

    // --- OPERATIONS ---

    /**
     * Short description of method GeneraReporte
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int idPerfil
     * @param  int idSector
     * @param  int idEntidad
     * @param  int chkDatGenerales
     * @param  int chkSintomas
     * @param  int chkComorbilidad
     * @param  int chkDatClinicos
     * @param  int chkTratamiento
     * @param  int chkDatEpidemiologicos
     * @param  int chkLaboratorio
     * @param  int chkResultados
     * @param  int dtInicioSintomasIni
     * @param  int dtInicioSintomasFin
     * @param  int strFormato
     * @param  int strFile
     * @param  int opcFechas
     * @return void
     */
    public function GeneraReporte($idPerfil, $idSector, $idEntidad, $chkDatGenerales, $chkSintomas, $chkComorbilidad, $chkDatClinicos, $chkTratamiento, $chkDatEpidemiologicos, $chkLaboratorio, $chkResultados, $dtInicioSintomasIni, $dtInicioSintomasFin, $strFormato, $strFile, $opcFechas)
    {
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FFE begin
        $param = $idSector.'|'.$idPerfil.'|'.$idEntidad.'|'.$chkDatGenerales.'|'.$chkDatClinicos.'|'.$chkSintomas.'|'.$chkComorbilidad.'|'.$chkTratamiento.'|'.$chkDatEpidemiologicos.'|'.$chkLaboratorio.'|'.$dtInicioSintomasIni.'|'.$dtInicioSintomasFin.'|'.$chkResultados.'|'.$opcFechas;
	//echo $param;
        //return $this->ejecutaSP("sp_ExtraeReporte", $param);
        $stp=mssql_init("sp_ExtraeReporte",$this->link);

        mssql_bind($stp,'@param',$param,SQLVARCHAR,false,false,8000);
        $resultSet=mssql_execute($stp);
        $num = mssql_num_fields($resultSet);
        $cadena ="";

        if ($strFormato == "xls")
            {
                $cadena .= "<table border=1><tr>\n";
                for ($x=0;$x<$num;$x++)
                    {   $xcampo = mssql_field_name($resultSet, $x);
                        $cadena .= "<td><b>$xcampo</b></td>\n";
                    }

                 while($arr=mssql_fetch_array($resultSet)){
                                $cadena .= "<tr>\n";
                                for ($x=0;$x<$num;$x++){
                                $rot = $arr[$x];
                                $cadena .= "<td>".$rot."</td>\n";
                                }
                                $cadena .= "</tr>\n";

                 }
                $cadena .= "</table>";
            }
        else
            {   for ($x=0;$x<$num;$x++)
                    {
                        $xcampo = mssql_field_name($resultSet, $x);
                        $cadena .= $xcampo."|";
                    }
                $cadena .= chr(13).chr(10);

                while($arr=mssql_fetch_array($resultSet))
                    {   for ($x=0;$x<$num;$x++)
                            {   $campo = str_replace("|","",$arr[$x]);
                                $cadena .= $campo."|";
                            }
                        $cadena .= chr(13).chr(10);
                    }
            }
        mssql_free_statement($stp);
        return $cadena;
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000000FFE end
    }

    /**
     * Short description of method cmbEstado
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int onChange
     * @param  int status
     * @param  int default
     * @param  int param
     * @return void
     */
    public function cmbEstado($onChange, $status, $default, $param)
    {
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000001010 begin
		return $this->creaCombo("SP_listaEstados", "nEstado", "nEstado", $onChange, $status, $default, $param);
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000001010 end
    }

    /**
     * Short description of method FileName
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int idPerfil
     * @param  int idEntidad
     * @param  int idSector
     * @return void
     */
    public function FileName($idPerfil, $idEntidad, $idSector)
    {
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000001023 begin
         $param = $idPerfil.'|'.$idEntidad.'|'.$idSector.'|';
        return $this->ejecutaSP("sp_NombreReporte", $param);
        // section -64--88-1-14-5d941fc8:1258f3a5782:-8000:0000000000001023 end
    }

    /**
     * Short description of method cmbSector
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int onChange
     * @param  int status
     * @param  int default
     * @param  int param
     * @return void
     */
    public function cmbSector($onChange, $status, $default, $param)
    {
        // section 10-16-10-35-3c805d3e:1269fab0ba0:-8000:00000000000010D0 begin
        return $this->creaCombo("sp_listaInstituciones", "nSector", "nSector", $onChange, $status, $default, $param);
        // section 10-16-10-35-3c805d3e:1269fab0ba0:-8000:00000000000010D0 end
    }

    /**
     * Short description of method graficosEdad
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int tipoRep
     * @param  int id_laboratorio
     * @param  int tipoGraf
     * @return void
     */
    public function graficosEdad($tipoRep, $id_laboratorio, $tipoGraf)
    {
        // section 10-16-10-43-54a0847f:12707735e0e:-8000:00000000000010F5 begin
        if($id_laboratorio==99){$id_laboratorio=0;}
        $param=$tipoRep.'|'.$id_laboratorio.'|';
       // echo "SP_RptGrafEdad '".$param."'";
        $stp=mssql_init("SP_RptGrafEdad",$this->link);
         mssql_bind($stp,'@param',$param,SQLVARCHAR,false,false,30);
         $resultSet=mssql_execute($stp);
        
         $i=0;
         $suma=0;
        while($sum= mssql_fetch_assoc($resultSet)){
                  $suma=$suma+$sum["Caso"];
                  $array[] = $sum;
        }


         if ($tipoGraf==1){
            $graf="data.addRows(".(mssql_num_rows($resultSet)+1).");";
          foreach($array as $key=>$value){
                   $graf.="data.setCell(".$i.",0,'".$value["Rango"]."');";
                   $graf.="data.setCell(".$i.",1,".$value["Caso"].");";
                   $porcentaje=($value["Caso"]*100)/$suma;
                   $graf.="data.setCell(".$i.",2,'".round($porcentaje,2)."%');";
                   $i++;
          }
                   $graf.="data.setCell(".$i.",0,'Total General');";
                   $graf.="data.setCell(".$i.",1,".$suma.");";
                   $graf.="data.setCell(".$i.",2,'100%');";
   
         }
          elseif($tipoGraf==2)
            {
              $graf="data.addRows(".mssql_num_rows($resultSet).");";
             foreach($array as $key=>$value){
               $graf.="data.setValue(".$i.",0,'".$value["Rango"]."');";
               $graf.="data.setValue(".$i.",1,".$value["Caso"].");";
              $i++;
            }
          }
         mssql_free_result($resultSet);
         mssql_free_statement($stp);
        return $graf;
        // section 10-16-10-43-54a0847f:12707735e0e:-8000:00000000000010F5 end
    }

    /**
     * Short description of method graficoSexo
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int tipoRep
     * @param  int id_laboratorio
     * @param  int tipoGraf
     * @return void
     */
    public function graficoSexo($tipoRep, $id_laboratorio, $tipoGraf)
    {
        // section 10-16-10-68--4191a967:1271bf47e08:-8000:00000000000010FF begin
      if($id_laboratorio==99){$id_laboratorio=0;}
          $param=$tipoRep.'|'.$id_laboratorio.'|';
        $stp=mssql_init("SP_RptGrafSexo",$this->link);
         mssql_bind($stp,'@param',$param,SQLVARCHAR,false,false,30);
         $resultSet=mssql_execute($stp);

         $i=0;
         $sumaH=$sumaM=$sumaT=0;
        while($sum= mssql_fetch_assoc($resultSet)){
                  $sumaH=$sumaH+$sum["Hombres"];
                  $sumaM=$sumaM+$sum["Mujeres"];
                  $sumaT=$sumaT+$sum["TOTAL"];
                  $array[] = $sum;
        }

           if ($tipoGraf==1){
            $graf="data.addRows(".(mssql_num_rows($resultSet)+1).");";
          foreach($array as $key=>$value){
                   $graf.="data.setCell(".$i.",0,'".$value["Rango"]."');";
                   $graf.="data.setCell(".$i.",1,".$value["Mujeres"].");";
                   $graf.="data.setCell(".$i.",2,".$value["Hombres"].");";
                   $graf.="data.setCell(".$i.",3,".$value["TOTAL"].");";
                   $i++;
          }
                   $graf.="data.setCell(".$i.",0,'Total General');";
                   $graf.="data.setCell(".$i.",1,".$sumaM.");";
                   $graf.="data.setCell(".$i.",2,".$sumaH.");";
                   $graf.="data.setCell(".$i.",3,".$sumaT.");";

         }
          elseif($tipoGraf==2)
            {
              $graf="data.addRows(".mssql_num_rows($resultSet).");";
             foreach($array as $key=>$value){
               $graf.="data.setValue(".$i.",0,'".$value["Rango"]."');";
               $graf.="data.setValue(".$i.",1,".$value["Mujeres"].");";
               $graf.="data.setValue(".$i.",2,".$value["Hombres"].");";
              $i++;
            }
          }elseif($tipoGraf==3){
              $graf="data.addRows(3);";
              $graf.="data.setValue(0,0,'Mujeres');";
              $graf.="data.setValue(0,1,".$sumaM.");";
              $graf.="data.setValue(0,2,'".round(($sumaM*100)/$sumaT,2)."%');";
              $graf.="data.setValue(1,0,'Hombres');";
              $graf.="data.setValue(1,1,".$sumaH.");";
              $graf.="data.setValue(1,2,'".round(($sumaH*100)/$sumaT,2)."%');";
              $graf.="data.setValue(2,0,'Total General');";
              $graf.="data.setValue(2,1,".$sumaT.");";
              $graf.="data.setValue(2,2,'100%');";
          }
         mssql_free_result($resultSet);
         mssql_free_statement($stp);
        return $graf;
        // section 10-16-10-68--4191a967:1271bf47e08:-8000:00000000000010FF end
    }

    /**
     * Short description of method graficoIndxRechazo
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int nLab
     * @param  int opc
     * @return void
     */
    public function graficoIndxRechazo($nLab, $opc)
    {
        // section 10-16-10-19--4914061c:1274e8a88d8:-8000:000000000000110E begin
        if($nLab==99){$nLab=0;}

         $stp=mssql_init("SP_RptIndxRechazo",$this->link);
         mssql_bind($stp,'@param',$nLab,SQLVARCHAR,false,false,30);
         $resultSet=mssql_execute($stp);
        $result=mssql_fetch_assoc($resultSet);
 
        if ($opc==1){
         
         $porciento=round($result['Porcentaje'],2);
         $graf= "data.setValue(0, 0, 'Rechazo');";
         $graf.="data.setValue(0,1,$porciento);";

        }else if($opc==2){

        $graf='{'.$result["Rechazo"].'}{'.$result["TotalRegistros"].'}X100';

        }
        return $graf;
        // section 10-16-10-19--4914061c:1274e8a88d8:-8000:000000000000110E end
    }

    /**
     * Short description of method graficoOprTomaMuestra
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int nLab
     * @param  int opc
     * @return void
     */
    public function graficoOprTomaMuestra($nLab, $opc)
    {
        // section 10-16-10-19--4914061c:1274e8a88d8:-8000:0000000000001111 begin
      if($nLab==99){$nLab=0;}
 
          $stp=mssql_init("SP_RptOpTomaMuestra",$this->link);
          mssql_bind($stp,'@param',$nLab,SQLVARCHAR,false,false,30);
          $resultSet=mssql_execute($stp);
          $registros = mssql_num_rows($resultSet);
	$es_par = ($registros%2);

	if($es_par==0){
		// es par
		$cnt=0; $valor=0;
		$nPosicion = ($registros/2);
		$nPosicion2 = $nPosicion + 1;
		while($datos = mssql_fetch_array($resultSet)){
			if($cnt >= $nPosicion && $cnt <= $nPosicion2)
				$valor += $datos[0];
			$nMediana = ($valor / 2);
			$cnt++;
		}
	}else{
		// es impar
		$cnt=0;
		$nPosicion = ceil($registros/2);
		while($datos = mssql_fetch_array($resultSet)){
			if($cnt == $nPosicion)
				$nMediana = $datos[0];
			$cnt++;
		}
	}
         $graf= "data.setValue(0, 0, '');";
         $graf.="data.setValue(0,1,$nMediana);";

         return $graf;
        // section 10-16-10-19--4914061c:1274e8a88d8:-8000:0000000000001111 end
    }

    /**
     * Short description of method graficoFaseAnalitica
     *
     * @access public
     * @author Miguel Angel Chavez
     * @param  int nLab
     * @return void
     */
    public function graficoFaseAnalitica($nLab)
    {
        // section 10-16-10-19-59482099:1275456a6e9:-8000:0000000000001116 begin
       if($nLab==99){$nLab=0;}

          $stp=mssql_init("SP_RptFaseAnalitica",$this->link);
          mssql_bind($stp,'@param',$nLab,SQLVARCHAR,false,false,30);
          $resultSet=mssql_execute($stp);
          $registros = mssql_num_rows($resultSet);
	$es_par = ($registros%2);

	if($es_par==0){
		// es par
		$cnt=0; $valor=0;
		$nPosicion = ($registros/2);
		$nPosicion2 = $nPosicion + 1;
		while($datos = mssql_fetch_array($resultSet)){
			if($cnt >= $nPosicion && $cnt <= $nPosicion2)
				$valor += $datos[0];
			$nMediana = ($valor / 2);
			$cnt++;
		}
	}else{
		// es impar
		$cnt=0;
		$nPosicion = ceil($registros/2);
		while($datos = mssql_fetch_array($resultSet)){
			if($cnt == $nPosicion)
				$nMediana = $datos[0];
			$cnt++;
		}
	}
         $graf= "data.setValue(0, 0, '');";
         $graf.="data.setValue(0,1,$nMediana);";

         return $graf;
        // section 10-16-10-19-59482099:1275456a6e9:-8000:0000000000001116 end
    }

} /* end of class fncReportes */

?>